# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 18、多套环境.py
@time : 2022/6/26 10:09
"""

import requests

"""
dev        开发环境    开发自测
QA         测试环境    QA日常测试
preprod   预发布环境   回归测试、产品验收测试
prod        线上环境   用户使用环境
"""

"""
多套被测环境切换的意义和价值
访问信息：不同环境的域名或 ip 都不一样，部分产品 Host 也会有区别
配置信息：DB、Redis、ES 等中间件的配置信息不同环境也不一样 
"""
# 每条用例的 url 都是写死的，一旦切换环境，所有的用例都要修改
# r = requests.post("https://httpbin.testing-studio.com/post", data=data)

"""
实现目标：
1.全局控制，一键切换   -  环境管理
2.可维护性和扩展性强，可以应对不断演进的环境变化  -  环境切换

实现方案：
使用环境管理文件
    yaml
    ini
    常量类
使用不同的文件管理不同的环境
在接口用例中指定 path,不指定 url
"""

"""
# test.yaml 测试环境配置
env_config:
    base_url: https://httpbin.org/
db_config:
    host: httpbin.org
    username: root
    password: 123456
redis_config:
    host: httpbin.org
    port: 8100
# dev.yaml 开发环境配置
env_config:
    base_url: https://httpbin.ceshiren.com/
db_config:
    host: httpbin.ceshiren.com
    username: root
    password: 123456
redis_config:
    host: httpbin.ceshiren.com
    port: 8100
    
如果只有 url 时
    test: http://ceshiren.com
    dev: http://hogwarts.com  


环境切换
    1.通过环境变量进行切换
    2.通过命令行参数进行切换
"""

import os
import requests
import yaml

# ======================================== 通过环境变量进行切换 =================================================
# 设置环境变量： set env=dev
"""
# 开发环境的配置文件 dev.yaml
env_config:
    base_url: https://httpbin.ceshiren.com/
db_config:
    host: httpbin.ceshiren.com
    username: root
    password: 123456
"""


class TestMulitiEnv:

    def setup_class(self):
        default = os.getenv("interface_env", default="dev")
        data = yaml.safe_load(open(f"{default}.yaml", encoding="utf-8"))
        self.env = data
        self.base_url = self.env["env_config"]["base_url"]

    def test_devenv(self):
        path = "/get"
        r = requests.get(self.base_url + path)
        assert r.json()["headers"]["Host"] == "httpbin.ceshiren.com"

    def test_testenv(self):
        path = "/get"
        r = requests.get(self.base_url + path)
        assert r.json()["headers"]["Host"] == "httpbin.org"
